home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-11-15 | 6.0 KB | 129 lines | [TEXT/pdos] |
- Apple II
- Technical Notes
- _____________________________________________________________________________
- Developer Technical Support
-
- Apple IIGS
- #49: Rebooting (Really)
-
- Revised by: Matt Deatherage January 1989
- Written by: Matt Deatherage & Jim Merritt November 1988
-
- This Technical Note discusses rebooting the Apple IIGS from software.
- Changed since November 1988: Corrected two assembly-language
- instructions in the FROMNATV routine in the example code.
- _____________________________________________________________________________
-
- In days gone by, many Apple II applications had a Quit menu option.
- Unfortunately, a large number of these simply rebooted the machine. Today,
- this is far from desirable. Even with the advantages of GS/OS-reduced booting
- time (around 34 seconds with an Apple 3.5 Drive), waiting for the operating
- system to reload, as well as wiping out any ongoing tasks by desk accessories
- (such as an alarm clock) makes the standard ProDOS 8 or GS/OS QUIT call much
- more attractive.
-
- However, there are still instances where an application may wish to require
- the user to reboot. A common example might be a game. The game might use
- GS/OS in a completely standard way, but if you QUIT from the program GS/OS
- booted into, you will be returned to the same program. Since most
- applications will boot into the Finder, this is not a widespread problem.
- However, the Finder must also provide the reboot option, and alternate program
- selector applications may wish to provide this functionality as well.
-
-
- The Easy Way
-
- GS/OS provides a mechanism for rebooting with the OSShutdown call. This call,
- documented in GS/OS Reference, Volume 1, will either reboot the system (after
- first shutting down all loaded and generated drivers and closing all open
- sessions) or will shut down everything and present a dialog box which states,
- "You may now power down your Apple IIGS safely." A Restart button is provided
- which allows the user to reboot without pressing Control-Open Apple-Reset .
-
- Note: When using System Disk 4.0, if the Window Manager is active
- when you issue the OSShutdown call, there must be at least one
- open window; it need not be visible, but it must be open. This
- will be fixed in the next revision of GS/OS.
-
- The OSShutdown call also provides a way to resize the internal RAM disk (named
- /RAM5 by default). Most programs have absolutely no need to use this
- mechanism, and should avoid it whenever possible. A notable exception would
- be a third-party RAM disk utility which uses a battery backup, which may need
- to make changes which require resizing the RAM disk. Of course, such a
- utility should ask the user to ensure that erasing the RAM disk content is
- acceptable. Resizing the RAM disk is only possible when using the OSShutdown
- call; any other method you may be using to accomplish this function from
- software will break in the future.
-
-
- If you are using GS/OS, you should always use OSShutdown. You must not reboot
- the system in any other fashion. The OSShutdown mechanism provides a
- convenient and supported way to restart or shut down the system. Doing it
- another way can easily cause a loss of data.
-
-
- The Hard Way
-
- Programs not using GS/OS have a little more work to do. The supported non-
- GS/OS method of rebooting is similar to the method used on 8-bit machines:
- change the value of POWERUP ($00/03F4) and do a long jump to RESET ($FA62).
- However, there are a few catches:
-
- 1. The jump must be made in emulation mode.
- 2. Interrupts must be disabled.
- 3. The data bank register must be set to zero.
- 4. The direct page must be zero.
- 5. ROM firmware must be visible in the memory map.
- 6. Internal interrupt sources (such as the ones for AppleTalk) must be
- shut down.
-
- Simply disabling interrupts without shutting down AppleTalk interrupt sources
- inside the system will cause the system to hang when the jump to RESET is
- made. Turning off these internal interrupt sources is accomplished by
- changing softswitch values at $C039 (SCCAREG), $C041 (INTEN), and $C047
- (CLRVBLINT).
-
- The following code example demonstrates the correct method:
-
- POWRUP equ $0003F4 ;the power-up byte in bank zero
- STATEREG equ $C068 ;ROM/RAM state register
- CLRVBLINT equ $C047 ;clear VBL interrupt flags register
- INTEN equ $C041 ;interrupt enable register
- SCCAREG equ $C039 ;SCC register
- RESET equ $00FA62 ;ROM reset entry point
- ;
- FROMNATV anop ;enter here from native mode
- sei ;disable interrupts
- pea 0
- pea 0 ;push four zero bytes on the stack
- plb ;pull data bank register
- plb ;(twice to balance the stack)
- pld ;pull 16-bit data bank register
- sec
- xce ;go into emulation mode
- longa off
- longi off
- FROMEMUL anop ;enter here from emulation mode
- sei ;disable interrupts for people entering here
- dec POWRUP ;invalidate the power up byte
- lda #$0C ;ROM parameters
- sta STATEREG ;swap in the ROM and everything else out
- stz CLRVBLINT ;clear VBL interrupts
- stz INTEN ;turn off internal interrupt sources
- lda #$09
- sta SCCAREG ;shut down SCC interrupt sources
- lda #$C0
- sta SCCAREG
- jml RESET ;and off we go into the wild blue yonder
-
- These methods of restarting the system are presented for those applications
- that absolutely must do so. Rebooting is not a suggested way of ending an
- application and the techniques described in this Note should be used with
- extreme caution.
-
-
- Further Reference
- _____________________________________________________________________________
- o Apple IIGS Firmware Reference
- o GS/OS Reference, Volume 1
-